//
//  NSDate+RCExpand.h
//  NSDate
//
//  Created by 杨晓辉 on 2017/7/19.
//  Copyright © 2017年 杨晓辉. All rights reserved.
//

#import <Foundation/Foundation.h>
#define D_MINUTE	60
#define D_HOUR		3600
#define D_DAY		86400
#define D_WEEK		604800
#define D_YEAR		31556926


@interface NSDate (RCExpand)

/**
 取日期的年(year)字段
 */
@property (readonly) NSInteger dateYearField;
/**
 取日期的月(month)字段
 */
@property (readonly) NSInteger dateMonthField;

/**
 取日期的天(day)字段
 */
@property (readonly) NSInteger dateDayField;
/**
 取日期的小时(hour)字段
 */
@property (readonly) NSInteger dateHourField;
/**
 取日期的分钟(minute)字段
 */
@property (readonly) NSInteger dateMinuteField;
/**
 取日期的秒(seconds)字段
 */
@property (readonly) NSInteger dateSecondsField;
/**
 日期所在年的第几周
 */
@property (readonly) NSInteger weekOfMonth;

/**
 日期所在月的第几周
 */
@property (readonly) NSInteger weekOfYear;

/**
  日期的星期序号
 */
@property (readonly) NSInteger weekday;


#pragma mark ---日期格式属性--

/**
设置日的格式

@param dateFormatter 日期格式
@return 返回设置后的值
*/
- (NSString *)setDateFormatter:(NSString *)dateFormatter;



/**
 yyyy/MM/dd
 */
@property(readonly) NSString *formatterSolidusYMD;

/**
 yyyy-MM-dd
 */
 @property(readonly) NSString *formatterWhippletreeYMD;
 
 /**
 yyyy MM dd
 */
 @property(readonly) NSString *formatterSpaceYMD;
 
 /**
 yyyyMMdd
 */
 @property(readonly) NSString *formatterYMD;
 
 
 
 
 /**
 yyyy/MM/dd HH:mm:ss
 */
@property(readonly) NSString *formatterSolidusFull;

/**
 yyyy-MM-dd HH:mm:ss
 */
@property(readonly) NSString *formatterWhippletreeFull;

/**
 yyyy MM dd HH:mm:ss
 */
@property(readonly) NSString *formatterSpaceFull;

/**
 yyyyMMddHHmmss
 */
@property(readonly) NSString *formatterFull;



/**
 MM/dd/yyyy
 */
@property(readonly) NSString *formatterSolidusMDY;

/**
 MM-dd-yyyy
 */
@property(readonly) NSString *formatterWhippletreeMDY;

/**
 MM dd  yyyy
 */
@property(readonly) NSString *formatterSpaceMDY;

/**
 MMddyyyy
 */
@property(readonly) NSString *formatterMDY;


/**
 MM/dd/yyyy HH:mm:ss
 */
@property(readonly) NSString *formatterSolidusMDYFull;

/**
 MM-dd-yyyy HH:mm:ss
 */
@property(readonly) NSString *formatterWhippletreeMDYFull;

/**
 MM dd  yyyy HH:mm:ss
 */
@property(readonly) NSString *formatterSpaceMDYFull;

/**
 MMddyyyyHHmmss
 */
@property(readonly) NSString *formatterMDYFull;




/**
 根据日期得到星期
 
 @param inputDate 传入的日期
 @return 返回的星期
 */
+ (NSString*)weekdayStringFromDate:(NSDate*)inputDate;
/**
 获取当前日历

 @return 返回一个单利对象
 */
+ (NSCalendar *) currentCalendar;

/**

获取相邻几天的日期
@param dayNum 天数
@param format 传入的日期格式
@param date 传入的日期
@return 返回结果
*/
+ (NSString *)getDateSinceDay:(NSInteger)dayNum format:(NSString *)format date:(NSDate*)date;


/**
 获取手机语言时区的时间
 
 @param date 传入的日期
 @return 返回的日期结果
 */
+(NSDate*)getLocalDate:(NSDate*)date;

/**
 NSstring 转换为Date
 
 @param dateString 传入的日期字符串
 @param format 传入的日期格式
 @return 返回结果
 */
+ (NSDate *)dateFromString:(NSString *)dateString format:(NSString*)format;



/**
 Date转换为 NSstring
 
 @param date 传入的日期
 @param format 传入的日期格式
 @return 返回结果
 */
+ (NSString*)stringFromDate:(NSDate*)date withFormString:(NSString*)format;


/**
 Date转换为 NSstring
 
 @param date 传入的日期
 @param dateStyle 时间样式
 @return 返回结果
 */
+ (NSString *)dateFromStringWithDateStyle:(NSDateFormatterStyle)dateStyle date:(NSDate*)date;


/**
 获取时间字符串，毫秒数

 @return 返回毫秒数
 */
+ (NSString *)dateTimeString;


/**
  返回x分钟前/x小时前/昨天/x天前/x个月前/x年前

 @return 返回x分钟前/x小时前/昨天/x天前/x个月前/x年前
 */
- (NSString *)timeInfo;
+ (NSString *)timeInfoWithDate:(NSDate *)date;
+ (NSString *)timeInfoWithDateString:(NSString *)dateString;


/**
 获取一年中的总天数

 @return 返回天数
 */
- (NSUInteger)daysInYear;
+ (NSUInteger)daysInYear:(NSDate *)date;


/**
 * 判断是否是润年
 * @return YES表示润年，NO表示平年
 */
- (BOOL)isLeapYear;
+ (BOOL)isLeapYear:(NSDate *)date;

/**
  获取指定月份的天数

 @param month 指定的月份
 @return 返回的天数
 */
- (NSUInteger)daysInMonth:(NSUInteger)month;
+ (NSUInteger)daysInMonth:(NSDate *)date month:(NSUInteger)month;

/**
  获取相隔numYears年的日期

 @param numYears 年数
 @return 返回结果日期
 */
- (NSDate *)offsetYears:(int)numYears;
+ (NSDate *)offsetYears:(int)numYears fromDate:(NSDate *)fromDate;


/**
 获取相隔numMonths月的日期

 @param numMonths 月数
 @return 返回numMonths月后的日期
 */
- (NSDate *)offsetMonths:(int)numMonths;
+ (NSDate *)offsetMonths:(int)numMonths fromDate:(NSDate *)fromDate;

/**
 获取相隔numDays天的日期
 
 @param numDays 数
 @return 返回numDays后的日期
 */
- (NSDate *)offsetDays:(int)numDays;
+ (NSDate *)offsetDays:(int)numDays fromDate:(NSDate *)fromDate;

/**
 获取相隔hours的日期
 
 @param hours 数
 @return 返回hours月后的日期
 */
- (NSDate *)offsetHours:(int)hours;
+ (NSDate *)offsetHours:(int)numHours fromDate:(NSDate *)fromDate;


///从时间中分离出小时和分钟等时间元素
- (NSDateComponents *)getDateComponentsFromCurrentDate;
@end
